#include "ECGDeviceThread.h"
#ifdef Q_OS_WIN
#include <windows.h>
#elif defined(Q_OS_LINUX)
#include <pthread.h>
#endif

ECGDeviceThread::ECGDeviceThread(ECGDevice* device, QObject* parent)
    : QThread(parent), m_device(device), m_running(false)
{
    setObjectName("ECGDeviceThread");
}

void ECGDeviceThread::run()
{
    m_running = true;

    // 设置较低优先级
    setPriority(QThread::LowPriority);

    // 平台特定的CPU亲和性设置
#ifdef Q_OS_WIN
    // Windows平台设置CPU亲和性
    SetThreadAffinityMask(GetCurrentThread(), 0x1); // 使用CPU核心0
#elif defined(Q_OS_LINUX)
    // Linux平台设置CPU亲和性
    cpu_set_t cpuset;
    CPU_ZERO(&cpuset);
    CPU_SET(0, &cpuset);
    pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
#endif

    // 将设备对象移动到此线程
    m_device->moveToThread(this);

    // 注意：不要创建新线程移动串口对象，保持在同一线程内

    // 进入事件循环
    exec();

    qDebug() << "ECG设备线程已停止";
}

void ECGDeviceThread::stopThread()
{
    m_running = false;
    quit();
}
